#include <REGX52.H>
#include "delay.h"

sbit RCK = P3^5; //RCLK
sbit SRCLK = P3^6;
sbit SER = P3^4;

#define MATRIX_LED_PORT P0

/** @bref 74HC595初始化
  * @param 无
  * @retval 无
  */
void _74HC595_init()
{
	SRCLK = 0;
	RCK = 0;
}

/** @bref 向74HC595写入一个字节
  * @param 写入的字节
  * @retval 无
  */
void _74HC595_writeByte(unsigned char byte)
{
	unsigned char i = 0;
	for(i = 0; i < 8; i++)
	{
		// 按位放入移位寄存器SER中（从高位到低位），同1与是原数，同0与都是0。
		SER = byte & (0x80 >> i);
		// 上升沿移位
		SRCLK = 1;
		SRCLK = 0;
	}
	// 数据输出到缓存
	RCK = 1;
	RCK = 0;
}

/** @bref LED点阵屏显示一列数据
  * @param column 列的位置（0-7），0在最左边
	* @param byte 要显示的数据，1为亮，0为灭
  * @retval 无
  */
void MATRIX_LED_showColumn(unsigned char column, byte)
{
	// 行数据写入（1为亮，0为灭）
	_74HC595_writeByte(byte);
	// 列数据写入（0为亮，1为灭）
	MATRIX_LED_PORT = ~(0x80 >> column);
	delay(1);
	MATRIX_LED_PORT = 0xff;
}